Digital graphic design, image editing, and video editing applications (hereafter collectively referred to as “client” applications) provide graphical designers, media artists, and other users with the necessary tools to create a variety of media content. Examples of such applications include Final Cut Pro® and iMovie®, both sold by Apple® Inc. Applications such as these give users the ability to generate 2D and 3D computer graphics and computer animations, as well as to edit, combine, transition, overlay, and piece together different media content in a variety of manners to create a resulting media project. The resulting media project specifies a combination of audio and/or video content that is used to create a media presentation.
The media presentation may be rendered using various resources in order to produce the final video output. Different systems may include different rendering hardware. In some cases, one or more graphics processing units (“GPU”) may be used to render the media presentation, while in other cases one or more central processing units (“CPU”) may be used to render the media composition. In addition, some applications may use a combination of one or more GPUs and one or more CPUs (and/or multi-core CPUs) to render the media presentation. These different resources promise significant boost in performance of graphic rendering if the system is able to effectively manage these resources as concurrent rendering resources.
The various available GPUs and/or CPUs may each execute different formats of computer code. In addition, different CPUs and GPUs have different capabilities and limitations. For these reasons, code developers may have to spend a substantial amount of time manually translating code to run on different platforms, optimizing the code for efficient performance on the different platforms, and/or generating various support functions and parameters needed by the different platforms. Furthermore, substantial effort has to be invested by code developers in order to enable concurrent job execution across the different rendering resources before the promised gain in performance can be realized.
Thus, there is a need for an image processing framework capable of effectively utilizing the multiple different rendering resources concurrently in order to deliver the performance needed by high throughput image processing applications.